2  Razones, Proporciones y Tasas

A continuación se muestra una imágen para mapear las razones, proporciones y tasas dentro del contexto de las medidas epidemiológicas.

2.1 Razones

Es el cociente que resulta de dividir dos valores provenientes de conjuntos independientes. (Jaramillo Arango 2010)

# Creación de tabla con n número de machos y n número de hembras 
rpt <- data.frame(
  sexo = c(
    rep("macho", 3),
    rep("hembra", 7)
    )
)

# Impresión de la tabla creada
rpt
     sexo
1   macho
2   macho
3   macho
4  hembra
5  hembra
6  hembra
7  hembra
8  hembra
9  hembra
10 hembra
# Cálculo de la razón de hembras contra machos
table(rpt)[1] / table(rpt)[2]
  hembra 
2.333333 
# Cálculo de la razón de machos contra hembras
table(rpt)[2] / table(rpt)[1]
    macho 
0.4285714 

2.2 Proporciones

Implica que en nuestra división el numerador forma parte del denominador. (Jaramillo Arango 2010)

prop.table(
  table(rpt)
)
sexo
hembra  macho 
   0.7    0.3 

2.3 Tasas

Son formas especiales de proporciones, básicamente están constituidas por un numerador, un denominador y un factor de multiplicación. (Jaramillo Arango 2010)

El factor de multiplicación es \(10^n\), donde n puede tomar diferentes valores que se muestran a continuación:

\[\begin{array}{c c} {Factor} & {Interpretación} \\ \hline \ (10^1) & Proporción\ simple \\ \ (10^2) & Porcentaje \\ \ (10^{>2}) & Tasa\ propiamente\ dicha \end{array}\]

2.3.1 Morbilidad

La morbilidad permite conocer qué tanto se presenta la enfermedad en la población. (Jaramillo Arango 2010)

2.3.1.1 Tasa de Prevalencia (TP)

Indica la cantidad de enfermedad que existe en una población. (Jaramillo Arango 2010)

La Tasa de Prevalencia resulta de dividir el total de casos en una población en un lugar y momento dados dentro del total de la población en ese lugar y momento dados.

Fórmula:

\[\begin{equation}{} TP = \frac{c^{tl}} {N^{tl}}10^n \end{equation}\]

Donde:

\(c^{tl}\) = Casos en una población en un tiempo y lugar y dados.

\(N^{tl}\) = Total de la población en un tiempo y lugar dados

Simularemos la presencia de casos de enfermedades respiratorias, digestivas y nerviosas durante 5 años en una granja porcina.

# Semilla de aleatoriedad
set.seed(1948)

# Base de datos de 5 años con la fercuencia de 3 enfermedades
morbilidad_simulada <- 
  data.frame(
    fecha = seq.Date(
      from = as.Date("2019-01-01"), to = as.Date("2024-12-31"), by = "days"),
    inventario = round(rnorm(2192, mean = 22*300, sd = 15), 0),
    respiratorias = c(round(rnorm(n = 365, mean = 25, sd = 15), 0),
                      round(rnorm(n = 366, mean = 30, sd = 5), 0),
                      round(rnorm(n = 365, mean = 50, sd = 15), 0),
                      round(rnorm(n = 365, mean= 60, sd = 12), 0),
                      round(rnorm(n = 365, mean= 65, sd = 12), 0),
                      round(rnorm(n = 366, mean= 70, sd = 12), 0)
    ),
    digestivas = c(round(rnorm(n = 365, mean = 10, sd = 1), 0),
                   round(rnorm(n = 366, mean = 9, sd = 1), 0),
                   round(rnorm(n = 365, mean = 7, sd = 1), 0),
                   round(rnorm(n = 365, mean = 5, sd = 0.25), 0),
                   round(rnorm(n = 365, mean = 2, sd = 0.25), 0),
                   round(rnorm(n = 366, mean = 1, sd = 0.25), 0)
    ),
    nerviosas = c(round(rnorm(n = 365, mean = 3, sd = 1), 0),
                  round(rnorm(n = 366, mean = 3, sd = 1), 0),
                  round(rnorm(n = 365, mean = 3, sd = 0.5), 0),
                  round(rnorm(n = 365, mean = 3, sd = 0.25), 0),
                  round(rnorm(n = 365, mean = 3, sd = 0.25), 0),
                  round(rnorm(n = 366, mean = 3, sd = 0.25), 0)
    )
  )

Prevalencia anual

Convertimos la tabla original a formato “largo” con la función pivot_longer.

Reglas para tener un formato ordenado o formato “tidy”:

  1. Cada variable debe tener su propia columna.
  2. Cada observación debe tener su propia fila.
  3. Cada valor debe tener su propia celda.

(Wickham 2017)

morbilidad_simulada_pivot <- morbilidad_simulada |> 
  pivot_longer(cols = c(respiratorias, digestivas, nerviosas),
               names_to = "enfermedades",
               values_to = "casos"
  )

Tabla original (encabezado y primeros 6 datos)

head(morbilidad_simulada)
       fecha inventario respiratorias digestivas nerviosas
1 2019-01-01       6602            24         11         3
2 2019-01-02       6632             9         10         3
3 2019-01-03       6590            32          9         4
4 2019-01-04       6602           -10         12         2
5 2019-01-05       6571             1          9         2
6 2019-01-06       6597            30         10         5

Tabla en formato “tidy” (encabezado y primeros 6 datos)

head(morbilidad_simulada_pivot)
# A tibble: 6 × 4
  fecha      inventario enfermedades  casos
  <date>          <dbl> <chr>         <dbl>
1 2019-01-01       6602 respiratorias    24
2 2019-01-01       6602 digestivas       11
3 2019-01-01       6602 nerviosas         3
4 2019-01-02       6632 respiratorias     9
5 2019-01-02       6632 digestivas       10
6 2019-01-02       6632 nerviosas         3

Obsérvece como en el formato “tidy” las enfermedades que antes ocupaban 3 columnas ahora ocupan una sola, y se agregó la columna “casos” en la que se colocó el conteo de dichas enfermedades.

Esta estructura de datos facilita hacer cálculos agrupando por enfermedades.

Es importante notar que en este caso es útil ordenar los datos de esta forma dado que todas todos los valores correspondientes a las 3 enfermedades corresponden a frecuencias, es decir conteos; sin embargo, no hubiese sido conveniente la transformación si cada enfermedad hubiese tenido un parámetro distinto, por ejemplo si las enfermedades respiratorias hubiesen tenido como valor un resultado de PCR, las enfermedades digestivas un porcentaje de diarrea, y las enfermedades nerviosas una escala de gravedad. En ese caso, colocar las 3 enfermedades en una sola columna conllevaría incumplir con el precepto de los datos “tidy” de que cada variable debe tener su propia columna y que observación debe tener su propia fila (porque si cada enfermedad tiene distinta escala de medición, se convierte en una variable distinta).

Bien, para calcular la prevalencia anual, agregamos una columna de año, usamos esa nueva variable para agrupar los datos y aplicamos la fórmula que como ya vimos consiste en sumar los casos y dividirlos dentro de la población total, en este caso lo multiplicamos por 1,000; entonces el resultado debe interpretarse como casos por cada 1,000 individuos.

(morbilidad_simulada_pivot_datos_agrupados <- 
morbilidad_simulada_pivot |> 
  mutate(año = year(fecha),
         mes = month(fecha)) |> 
  group_by(año, enfermedades) |> 
  summarise(prevalencia = sum(casos) / sum(inventario) * 1000))
`summarise()` has grouped output by 'año'. You can override using the `.groups`
argument.
# A tibble: 18 × 3
# Groups:   año [6]
     año enfermedades  prevalencia
   <dbl> <chr>               <dbl>
 1  2019 digestivas          1.52 
 2  2019 nerviosas           0.434
 3  2019 respiratorias       3.75 
 4  2020 digestivas          1.37 
 5  2020 nerviosas           0.468
 6  2020 respiratorias       4.56 
 7  2021 digestivas          1.05 
 8  2021 nerviosas           0.457
 9  2021 respiratorias       7.62 
10  2022 digestivas          0.758
11  2022 nerviosas           0.455
12  2022 respiratorias       9.05 
13  2023 digestivas          0.302
14  2023 nerviosas           0.450
15  2023 respiratorias       9.84 
16  2024 digestivas          0.153
17  2024 nerviosas           0.454
18  2024 respiratorias      10.6  

Como vemos, de esta forma logramos obtener la TP por año y enfermedad. Veamos ahora estos datos graficados.

Prevalencia por enfermedad en los 6 años

morbilidad_simulada_pivot_datos_agrupados |> 
ggplot(aes(enfermedades, prevalencia)) +
geom_col()

Prevalencia por enfermedad y año

morbilidad_simulada_pivot_datos_agrupados |> 
ggplot(aes(enfermedades, prevalencia)) +
geom_col() +
facet_wrap(~año)

morbilidad_simulada_pivot_datos_agrupados |> 
ggplot(aes(año, prevalencia, col = enfermedades)) +
geom_line()

2.3.1.2 Tasa de Incidencia Acumulada (TIA)

La TIA representa los casos nuevos en una población y en un período de tiempo determinado.

\[\begin{equation}{} TIA = \frac{cn^{tl}} {N^{tl}}10^n \end{equation}\]

Donde:

\(cn^{tl}\) = Casos nuevos en una población en un tiempo y lugar y dados.

\(N^{tl}\) = Total de la población en un tiempo y lugar dados

Para calcular la TIA debemos ante todo tener la certeza que los casos son nuevos, por tanto debemos asegurarnos de tener la trazabilidad adecuada. Si estamos evaluando la frecuencia de las enfermedades en una explotación como una granja grande y tan solo por los signos clínicos es muy difícil diferenciar entre casos nuevos y casos viejos, así que casi todas las evaluaciones corresponderán a Prevalencia. Si por el contrario, estamos evaluando la frecuencia de enfermedad mediante análisis de laboratorio, entonces sí podemos asegurarnos de llevar la trazabilidad de los animales muestreados y así poder distinguir entre Prevalencia e Incidencia.

Para la TIA usaremos un ejemplo donde hubo 12 vacas que enfermaron a lo largo del año de una población total de 500 vacas, los datos se muestran en la siguiente tabla

(tabla_TI <- data.frame(id = 1:12,
                        inicio = c(2, 3, 4, 4, 4, 6, 6, 7, 9, 9, 10, 11),
                        fin =    c(5, 5, 7, 6, 5, 8, 7, 9, 12, 10, 10, 12)
))
   id inicio fin
1   1      2   5
2   2      3   5
3   3      4   7
4   4      4   6
5   5      4   5
6   6      6   8
7   7      6   7
8   8      7   9
9   9      9  12
10 10      9  10
11 11     10  10
12 12     11  12
N <- 500
TIA <- nrow(tabla_TI) / N

TIA * 100
[1] 2.4

La TIA es de 2.4 por cada 1,000 vacas

2.3.1.3 Tasa de Incidencia Verdadera (TIV)

La incidencia permite conocer la probabilidad de ocurrencia de casos nuevos en una población en un tiempo dado, mide la rapidez con la cual se desarrolla una enfermedad, por lo que proporciona la idea más exacta de los nuevos casos, considerando el tiempo a riesgo que tienen cada uno de los individuos para enfermar. (Jaramillo Arango 2010)

\[\begin{equation}{} TIV = \frac{cn^{tl}} {ee + es} \end{equation}\]

Donde:

\(cn^{tl}\) = Casos nuevos en una población en un tiempo y lugar y dados.

\(ee\) = Suma de períodos de exposición de los animales que enfermaron.

\(es\) = Suma de períodos de exposición de los animales que no enfermaron.

N = 500
n <- nrow(tabla_TI)
meses <- 12
ee <- sum(tabla_TI$inicio) - n
es <- (N-n) * meses 

TIV <- n / (ee + es)

TIV * 1000
[1] 2.027369

La Tasa de Incidencia Verdadera es de 2 por cada 1,000 animales, es decir que la probabilidad mensual de adquirir la enfermedad es de 2 vacas por cada 1,000